package com.mmy.dao.line;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.mmy.domain.line.VLineBase;

public interface VLineBaseRepository extends JpaRepository<VLineBase, Integer> {
	
	//2021.03.22 批量修改线路种类 iType = :iType  @Param("iType")int iType
	
	/**
	 * 函数功能说明：查询本公司的线路
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 liys
	 * @date 创建日期 修改时间 2021.03.22
	 */
	@Query(value = "select * from vLineBase where iType = :iType and iOrgID = :iOrgID", nativeQuery = true)
	List<VLineBase> findSurrouding(@Param("iOrgID") int iOrgID,@Param("iType")int iType);
	

	/**
	 * 函数功能说明：后台 线路列表
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.03.22
	 */
	@Query(value = "select * from vLineBase where iType = :iType and iOrgID = :iOrgID "
			+ "and (:strLineName = \"\" or cLineName like %:strLineName%)"
			+ "and (:strZoneID = \"\" or iZoneID = :strZoneID)"
			+ "and (:strCity = \"\" or left(iZoneID,4) = left(:strCity,4))"
			+ "and (:strProvince = \"\" or left(iZoneID,2) = left(:strProvince,2))"
			+ "order by dCreateDate desc limit :iTempPageNo,:iPageSize", nativeQuery = true)
	List<VLineBase> findSurroudingPage(@Param("iOrgID") int iOrgID, @Param("strLineName") String strLineName,
			@Param("strZoneID") String strZoneID, @Param("strCity") String strCity,
			@Param("strProvince") String strProvince, @Param("iTempPageNo") int iTempPageNo,
			@Param("iPageSize") int iPageSize,@Param("iType")int iType);

	/**
	 * 函数功能说明：前台 查询有计划的线路全部信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人liys
	 * @date 创建日期  2020.11.18 修改时间2021.03.22
	 */
	@Query(value = "select * from vLineBase where iLineID in (:lstLineID) and iType = :iType limit :iTempPageNo,:iPageSize", nativeQuery = true)
	List<VLineBase> findSurroudingByPlan(@Param("lstLineID") List<Integer> lstLineID,@Param("iTempPageNo") int iTempPageNo, @Param("iPageSize") int iPageSize,
			@Param("iType")int iType);

	/**
	 * 获取分页参数
	 *
	 * @author 创建人 liys
	 * @date 创建日期 2021.03.22
	 */
	@Query(value = "select count(*) from vLineBase where vLineBase.iLineID in (:lstLineID) and iType = :iType", nativeQuery = true)
	int getCountFront(@Param("lstLineID") List<Integer> lstLineID,@Param("iType")int iType);

	/**
	 * 函数功能说明：前台 查询有计划的线路信息(加搜索条件)
	 *
	 * @param 参数说明
	 * @return 返回值说明 List<VLineBase>
	 * @throws 异常处理说明
	 * @author 创建人liys
	 * @date 创建日期 修改时间2021.03.22
	 */
	@Query(value = "select * from vLineBase where vLineBase.iLineID in (:lstLineID) and iType = :iType and (:strZoneID = \"\" or iZoneID = :strZoneID) and (:strCity = \"\" or left(iZoneID,4) = left(:strCity,4))and (:strProvince = \"\" or left(iZoneID,2) = left(:strProvince,2)) and (:strDay = \"\" or iDay = :strDay) ", nativeQuery = true)
	List<VLineBase> findSurroudingByPlanQuery(@Param("lstLineID") List<Integer> lstLineID,
			@Param("strZoneID") String strZoneID, @Param("strCity") String strCity,
			@Param("strProvince") String strProvince, @Param("strDay") String strDay,@Param("iType")int iType);

	/**
	 * 函数功能说明：查询该id线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 VLineBase
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	@Query(value = "select * from vLineBase where iLineID=?1", nativeQuery = true)
	VLineBase findByLineID(int iLineID);

	/**
	 * 函数功能说明：查询该旅行社线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 List<VLineBase>
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 修改时间 2021.03.22
	 */
	@Query(value = "select * from vLineBase where iOrgID = :orgID and iType = :iType", nativeQuery = true)
	List<VLineBase> findSurroudingOrgID(@Param("orgID") int orgID,@Param("iType")int iType);

	/**
	 * 函数功能说明：查本公司的线路ID
	 *
	 * @param 参数说明
	 * @return 返回值说明 List<Integer>
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.01.14 修改时间 2021.03.22
	 */
	@Query(value = "select iLineID from vLineBase where iOrgID = :iOrgID and iType = :iType", nativeQuery = true)
	List<Integer> findByOrgID(@Param("iOrgID") int iOrgID,@Param("iType")int iType);
	
	//前台
	
	/**
	 * 函数功能说明：查询该区对应的省且最近创建的近郊游线路的前8条信息
	 *
	 * @param 参数说明
	 * @return 返回值说明
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	@Query(value = "select * from vLineBase where left(iZoneID,2)=left(:iZoneID,2) and iType=1 order by dCreateDate desc limit 8;", nativeQuery = true)
	List<VLineBase> findSurroudingByZoneID(@Param("iZoneID") int iZoneID);

	/**
	 * 函数功能说明：查询该区对应的省且最近创建的境内游线路的前8条信息
	 *
	 * @param 参数说明
	 * @return 返回值说明
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	@Query(value = "select * from vLineBase where left(iZoneID,2)=left(:iZoneID,2) and iType=2 order by dCreateDate desc limit 8;", nativeQuery = true)
	List<VLineBase> findDomesticByZoneID(@Param("iZoneID") int iZoneID);

	/**
	 * 函数功能说明：查询该区对应的省且最近创建的境外游线路的前8条信息
	 *
	 * @param 参数说明
	 * @return 返回值说明
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	@Query(value = "select * from vLineBase where left(iZoneID,2)=left(:iZoneID,2) and iType=3 order by dCreateDate desc limit 8;", nativeQuery = true)
	List<VLineBase> findOutboundByZoneID(@Param("iZoneID") int iZoneID);

	/**
	 * 函数功能说明：查询该区对应的省且最近创建的目的地线路的前8条信息
	 *
	 * @param 参数说明
	 * @return 返回值说明
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	@Query(value = "select * from vLineBase where left(iZoneID,2)=left(:iZoneID,2) and iType=4 order by dCreateDate desc limit 8;", nativeQuery = true)
	List<VLineBase> findDestinationByZoneID(@Param("iZoneID") int iZoneID);
}
